home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / prolog.arc / BICYCLE.FIL < prev    next >
Text File  |  1985-07-11  |  2KB  |  56 lines

  1. /*=============================================================================*/
  2. /* Improved bicycle program. Ask: ?-partlist( bike ). */
  3.  
  4.  
  5. basicpart( rim ).
  6. basicpart( rearframe ).
  7. basicpart( gears ).
  8. basicpart( nut ).
  9. basicpart( spoke ).
  10. basicpart( handles ).
  11. basicpart( bolt ).
  12. basicpart( fork ).
  13.  
  14. assembly( bike, [quant( wheel, 2 ), quant( frame, 1 )] ).
  15. assembly( wheel, [quant( spoke, 20 ), quant( rim, 1 ), quant( hub, 1)] ).
  16. assembly( frame, [quant( rearframe, 1), quant( frontframe, 1 ) ] ).
  17. assembly( frontframe, [quant( fork, 1 ), quant( handles, 1 )] ).
  18. assembly( hub, [quant( gears, 1 ), quant( bolt, 7 ), quant( axle, 1 ) ] ).
  19. assembly( axle, [quant( bolt, 1 ), quant( nut, 2) ] ).
  20.  
  21. partlist( T ) :- partsof( 1, T, P ), collect( P, Q ),
  22.   printpartlist( Q ).
  23.  
  24. partsof( N, X, P ) :- assembly( X, S ), partsoflist( N, S, P ).
  25. partsof( N,X,[quant(X,N)]) :- basicpart( X ).
  26.  
  27. partsoflist( _, [], [] ).
  28. partsoflist( N, [quant( X, Num) | L ], T ) :-
  29.   M is N * Num,
  30.   partsof( M, X, Xparts ),
  31.   partsoflist( N, L, Restparts ),
  32.   append( Xparts, Restparts, T ).
  33.  
  34. collect( [], [] ).
  35. collect( [quant(X, N )|R], [quant( X, Ntotal)|R2] ) :-
  36.   collectrest( X, N, R, O, Ntotal ),
  37.   collect( O, R2 ).
  38.  
  39. collectrest( _, N, [], [], N ).
  40. collectrest( X, N, [quant( X, Num)|Rest ], Others, Ntotal ) :-
  41.   !,
  42.   M is N + Num,
  43.   collectrest( X, M, Rest, Others, Ntotal ).
  44. collectrest( X,N,[Other|Rest],[Other|Others],Ntotal ) :-
  45.   collectrest( X, N, Rest, Others, Ntotal ).
  46.  
  47. printpartlist( [] ).
  48. printpartlist( [quant( X, N )|R] ) :- nl,
  49.   print( '    ' ), print( N ), print( '     ' ),
  50.   print( X ), printpartlist( R ).
  51.  
  52. append( [], L, L ).
  53. append( [X|L1], L2, [X|L3] ) :- append( L1, L2, L3 ).
  54.  
  55. /*=============================================================================*/
  56.